﻿// 4931. 分发投票箱.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>


using namespace std;
/*

https://www.acwing.com/problem/content/4934/
有 N 个城市的居民参与政府选举投票。

其中，第 i 个城市收集到的有效选票数量为 ai。

这些选票都要放入政府提供的投票箱中进行保存。

政府一共准备了 B 个投票箱。

你的任务是将这些投票箱分配至各个城市，要求：

每个城市至少需要分得一个箱子。
每个箱子只能分配给一个城市，即不存在多个城市共用同一箱子的情况。
每个城市的所有选票都要装在分配给该城市的箱子中，如果该城市分得不止一个箱子，那么每个箱子分别装多少选票随意。
我们希望，通过对投票箱进行合理分配以及使用，使得所有 B 个箱子中，包含选票最多的箱子中包含的选票数量尽可能少。

请你计算并输出包含选票最多的投票箱中包含的选票数量的最小可能值。

例如，如果有 2 个城市，分别收集到 200000和 700000 张选票，而政府一共准备了 7
 个投票箱，那么最佳的投票箱分配以及使用方案为第 1个城市分得 2
 个箱子，每个箱子装 100000张选票，第 2个城市分得 5 个箱子，每个箱子装 100000
 张选票，这样包含选票最多的箱子中包含的选票数量为 100000。

再例如，如果有 4 个城市，分别收集到 120,2680,3400,200 张选票，而政府一共准备了 6
 个投票箱，那么一种最佳的投票箱分配以及使用方案为第 1个城市分得 1
 个箱子，用来装 120张选票，第 2个城市分得 2个箱子，每个箱子装 1340
 张选票，第 3个城市分得 2个箱子，每个箱子装 1700
 张选票，第 4个城市分得 1个箱子，用来装 200
 张选票，这样包含选票最多的箱子中包含的选票数量为 1700。

输入格式
输入包含多组测试数据。

每组数据第一行包含两个整数 N,B。

接下来 N行，每行包含一个整数 ai。

每组数据最后还要输出一个空行。

当输入一行为 -1 -1 时，表示输入结束。

输出格式
每组数据输出一行结果，一个整数，表示包含选票最多的投票箱中包含的选票数量的最小可能值。

数据范围
1≤N≤5×105
,
N≤Ble2×106
,
1≤ai≤5×106
输入样例：
2 7
200000
500000

4 6
120
2680
3400
200

-1 -1
输出样例：
100000
1700
*/

const int N = 500010;
int arr[N]; int n,b;

bool check(int x) {
	int cnt = 0;
	for (int i = 0; i < n; i++) {
		cnt += arr[i] / x;
		if (arr[i] % x != 0) cnt++;
	}

	return cnt <= b;
}


void solve() {
	int l = 1, r = 5000010;
	while (l < r) {
		int mid = l + r >> 1;
		if (check(mid)) {
			r = mid;
		}
		else {
			l = mid + 1;
		}
	}
	printf("%d\n",l);
}

int main()
{
	while (scanf("%d%d",&n,&b)) {
		if (n == -1 && b == -1) {break;}
		for (int i = 0; i < n; i++) {
			scanf("%d",&arr[i]);
		}
		solve();
	}

	return 0;
}

